package pessoal.funcionario;

import java.util.List;

import pessoal.Endereco;
import pessoal.funcionario.exception.FuncionarioExistenteException;
import pessoal.funcionario.exception.FuncionarioInvalidoException;
import util.CampoObrigatorioException;
import util.ErroAcessoRepositorioException;
import junit.framework.TestCase;

public class FuncionarioTest extends TestCase {

	Funcionario func1;
	Funcionario func2;
	Funcionario func3;
	Funcionario func4;
	Funcionario func5;
	Funcionario func6;
	Funcionario func8;
	
	Endereco end1;
	Endereco end2;
	
	
	
	RepositorioFuncionariosBDR rep;
	
	protected void setUp() throws Exception {
		end1 = new Endereco("testaaltera","11","testaaltera","babau","testaaltera","testaaltera","babau");
		end2 = new Endereco("testando","22","testando","33333","testando","testando","43");
		
		func1 = new Funcionario("11111","cadela","testaaltera!!!!!!",end1,456);
		func2 = new Funcionario("22222","222222222","sergio",end2,222);
		func3 = new Funcionario("33333","babau","babau",end1,333);
		func4 = new Funcionario("44444","testeA5555rar","testaArar",end2,666);
		func5 = new Funcionario("55555","555555555","MARACA",end2,555);
		func6 = new Funcionario("66666","testanto","testando",end2,555);
		func8 = new Funcionario("88888","testanto","testando",end2,555);
		
		
		rep = new RepositorioFuncionariosBDR();
	}

	/*public void testAtualizarFuncionario() {
		try {
			rep.atualizarFuncionario(func1);
		} catch (FuncionarioInvalidoException e) {
			fail("funcionario nao existe");
		} catch (ErroAcessoRepositorioException e) {
			fail("erro no acesso ao repositorio");
		}
	}*/

	/*public void testConsultarFuncionario() {
	
		try {
			Funcionario f = rep.consultarFuncionario("11111");
			System.out.println(f.getCpf()+"--"+f.getNome()+"--"+f.getRg()+"--" +
					f.getSalario()+"--"+f.getEndereco().getRua()+"--"+f.getEndereco().getNumero()
					+"--"+f.getEndereco().getBairro()+"--"+f.getEndereco().getCidade()+"--"+
					f.getEndereco().getComplemento()+"--"+f.getEndereco().getCep()+"--"+
					f.getEndereco().getUf());
			
		} catch (FuncionarioInvalidoException e) {
			fail("funcionario nao existe");
		} catch (ErroAcessoRepositorioException e) {
			fail("erro no acesso ao repositorio");
		}
	}

	public void testExcluirFuncionario() {
		try {
			rep.excluirFuncionario("88888343434");
			rep.excluirFuncionario("11111");
			rep.excluirFuncionario("33333");
			rep.excluirFuncionario("55555");
			rep.excluirFuncionario("66666");
		} catch (FuncionarioInvalidoException e) {
			fail("funcionario nao existe");
		} catch (ErroAcessoRepositorioException e) {
			fail("erro no acesso ao repositorio");
		}
		
	}

	public void testExiste() {
		try {
			assertTrue(rep.existeFuncionario("11111"));
			assertTrue(rep.existeFuncionario("111111"));
			assertTrue(rep.existeFuncionario("11111111111"));
			assertTrue(rep.existeFuncionario("22222222222"));
			assertTrue(rep.existeFuncionario("33333333333"));
			assertFalse(rep.existeFuncionario("w11111111111"));
		} catch (ErroAcessoRepositorioException e) {
			fail("erro no acesso ao repositorio");
		}
	}*/

	public void testInserirFuncionario() {
		try {
			rep.inserirFuncionario(func1);
			rep.inserirFuncionario(func2);
			rep.inserirFuncionario(func3);
			rep.inserirFuncionario(func4);
			rep.inserirFuncionario(func5);
		} catch (FuncionarioExistenteException e) {
			fail("funcionario ja existe");
		} catch (ErroAcessoRepositorioException e) {
			System.out.println(e.getExcecaoInterna());
			System.out.println(e.getCodigoErro());
			fail("erro no acesso ao repositorio");
		} catch (CampoObrigatorioException e) {
			fail("campo obrigatorio");
		}
	}

	public void testListarFuncionarios() {
		try {
			List<Funcionario> funcionarios=rep.listarFuncionarios();
			for(Funcionario e : funcionarios){
				System.out.println("************************");
				System.out.println(e.getCpf()+e.getNome()+e.getRg()+e.getSalario());
				System.out.println("endereco: "+e.getEndereco().getBairro()+
						e.getEndereco().getCidade()+e.getEndereco().getNumero());
				System.out.println("************************");
			}
		} catch (ErroAcessoRepositorioException e) {
			fail("falha no acesso ao repositorio");
		}
	}

}
